package com.ray.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.ray.bean.CompanyMaterialTableBean;
import com.ray.bean.CustomerBean;
import com.ray.bean.DepartmentBean;
import com.ray.bean.MaterialBean;
import com.ray.bean.OrderInfoDetailBean;
import com.ray.bean.PersonBean;
import com.ray.bean.ProcessBean;
import com.ray.bean.UserBean;
import com.ray.bean.WorkshopProductionCycleBean;
import com.ray.exception.ServiceException;
import com.ray.pojo.BaseProcessDetailPojo;
import com.ray.pojo.MyUser;
import com.ray.pojo.UserDeptWorkPojo;

public interface BasicDataMapper {
	
//物料表
	//获取物料详情
	List<MaterialBean> getMaterialDetail(Map map);
	//获取公司物料详情
	List<CompanyMaterialTableBean> getCompanyMaterialDetail(Map map);
	//获取物料代码
	List<String> getMaterialCode();
	//获取公司物料代码
	List<String> getCompanyMaterialCode(@Param("rqString")String rqString);
	//获取公司物料代码
	List<CompanyMaterialTableBean> getCompanyMaterialCode2(Map map);
	//获取最大_sortKey的物料代码
	String getMaxMaterialCode();
	//根据物料代码获取物料名称
	List<String> getMaterialNameByCode(@Param("materialCode")String materialCode);
	//获取物料名称
	List<String> getMaterialName();
	//获取公司物料名称
	List<String> getCompanyMaterialName(Map map);
	//获取规格型号
	List<String> getModel();
	//获取公司物料表规格型号
	List<String> getCompanyModel(Map map);
	//获取单位
	List<String> getUnit();
	//获取公司单位
	List<String> getCompanyUnit(Map map);
	//获取默认仓库
	List<String> getDefaultWarehouse();
	//获取公司默认仓库
	List<String> getCompanyDefaultWarehouse(Map map);
	//获取供应商名称
	List<String> getProviderName();
	//获取公司供应商名称
	List<String> getCompanyProviderName(Map map);
	//获取物料类型
	List<String> getMaterialType();
	//获取公司物料类型
	List<String> getCompanyMaterialType(Map map);
	//获取色号
	List<String> getColor();
	//获取公司色号
	List<String> getCompanyColor(Map map);
	//根据色号获取色号描述
	List<String> getColorDescription(@Param("color")String color);
	//根据色号获取公司色号描述
	List<String> getCompanyColorDescription(Map map);
	//查询所有物料
	List<MaterialBean> queryMaterial(Map map);
	//查询物料数量用于分页
	int queryMaterialCount(Map map);
	//查询所有物料
	List<CompanyMaterialTableBean> queryMaterialCompany(Map map);
	//查询物料数量用于分页
	int queryMaterialCompanyCount(Map map);
	//修改物料
	void updateMaterial(MaterialBean materialBean);
	//修改公司物料
	void updateCompanyMaterial(CompanyMaterialTableBean materialBean);
	//添加物料
	void insertMaterial(MaterialBean materialBean);
	//添加公司物料
	List<CompanyMaterialTableBean> insertCompanyMaterial(CompanyMaterialTableBean materialBean);
	//获取materialTable表的最大排序数
	int getMaxSortFromMaterialTable();
	
//用户表相关
	//查询该用户名是否存在
	String getUserName(@Param("personName")String personName, @Param("company")String company, @Param("id")String id);
	//查询全部职员
	List<PersonBean> queryPersonnel(Map map);
	//
	int queryPersonnelCount(Map map);
	//根据部门名称获取职员名称
	List<PersonBean> getPersonName(Map map); 
	//获取职员详情
	List<PersonBean> getPersonDetail(@Param("id")String id);
	//update职员
	void updatePerson(Map<String,Object> map);
	//insert职员
	void insertPerson(PersonBean personBean);
	//操作工资相关记录
	void operationSalaryRelatedRecord(Map<String, Object> map);
	//获取职员表的最大排序数
	int getMaxSortFromPerson();
	//根据部门名称获取部门id
	String getDeptId(@Param("deptName")String deptName, @Param("company")String company);
	//根据车间名称获取id
	String getWorkshopId(@Param("workshopName")String workshopName);
//部门表相关
	//查询部门数量
	int queryDeptCount(Map map);
	//查询所有部门
	List<DepartmentBean> queryDept(Map map);
	//获取部门名称
	List<DepartmentBean> getDeptName(Map map);
	//获取部门详情
	List<DepartmentBean> getDeptDetail(@Param("deptName")String deptName, @Param("company")String company,@Param("view")String view);
	//update部门表
	void updateDept(@Param("departmentBean")DepartmentBean departmentBean);
	//insert部门表
	void insertDept(@Param("departmentBean")DepartmentBean departmentBean);
	//从部门表获取最大排序数
	int getMaxSortFromDept();
	//根据公司名称获取公司Id
	Integer getCompanyId(@Param("company")String company);
	//获取部门经理
	List<PersonBean> getDeptManagerList(@Param("company")String company);
	
//客户表相关
	//获取所有客户
	List<CustomerBean> queryCustomers(Map map);
	int queryCustomersCount(Map map);
	
	//获取所有客户(新)
	List<CustomerBean> queryCustomersTwo(Map map);
	int queryCustomersTwoCount(Map map);
	
	//获取所有客户子公司(新)
	List<CustomerBean> queryCustomersSubTwo(Map map);
	int queryCustomersTwoSubCount(Map map);
	
	/**
	 * 获取客户代码
	 * @param map
	 * @return  
	 * @author 王荣
	 */
	List<CustomerBean> getCustomerCode(Map map);
	List<CustomerBean> getCustomerSubCode(Map map);
	//获取客户名称
	List<CustomerBean> getCustomerName(Map map);
	//获取客户详情
	List<CustomerBean> getCustomerDetail(Map map);
	//修改客户信息
	void updateCustomer(Map map);
	//修改客户信息子公司
	void updateCustomerSub(Map map);
	//插入客户信息
	void insertCustomer(@Param("customerBean")CustomerBean customerBean);
	//插入客户信息 子公司
	void insertCustomerSub(@Param("customerBean")CustomerBean customerBean);
	//获取客户表的最大排序数
	int getMaxSort();
	//查询工序Count
	int queryProcessCount(Map map);
	//查询所有工序
	List<ProcessBean> queryProcess(Map map);
//	List<ProcessBean> queryProcess();
	//查询所有周期的数量
	int queryCycleCount(Map map);
	//查询所有周期
	List<WorkshopProductionCycleBean> queryCycle(Map map);
	//获取车间名称
	List<WorkshopProductionCycleBean> getWorkshopName(Map map);
	List<WorkshopProductionCycleBean> getWorkshopNameByDeptId(Map map);
	//获取该车间下所有工序名称
	List<String> getWorkingProcedureName(Map map);
	//获取客户表的最大代码
	String getMaxCustomerCode();
	//获取部门表最大部门代码 暂时没用
	String getMaxDeptCode();
	
	/**获取车间信息
	 * @author nateLu
	 * @param map
	 * @return
	 */
	List<WorkshopProductionCycleBean> getWorkshop(Map map);
	/**
	 * 根据车间id获取工序信息
	 * @author nateLu
	 * @param map
	 * @return
	 */
	List<ProcessBean> getWorkingProcedureByWorkId(Map map);
	/**
	 * 根据车间名称找到车间信息
	 * @author natelu
	 * @param workShopName
	 * @return
	 */
	WorkshopProductionCycleBean getWorkShopByName(Map map);
	/**
	 * 根据id查找工序信息
	 * @author natelu
	 * @param procedurId
	 * @return
	 */
	ProcessBean getProcessById(@Param("id")String procedurId);
	/**
	 * 根据id获取车间信息
	 * @author natelu
	 * @param workShopId
	 * @return
	 */
	WorkshopProductionCycleBean getWCById(@Param("id")String workShopId);
	/**
	 * 根据车间id和工序名称查找id
	 * @param workShopId
	 * @param proce
	 * @return
	 */
	ProcessBean getProcessByWorkShopId(@Param("workShopId")String workShopId,@Param("proce") String proce);
	/**
	 * 获取所有车间下所有工序
	 * @author natelu
	 * @param map
	 * @return
	 */
	List<WorkshopProductionCycleBean> getAllWorkShopAndProcedure(Map map);
	/**
	 * 获取部门职务，判断是否存在部门经理
	 * @author wangrong
	 * @param deptName
	 * @param string 
	 * @param string 
	 * @return
	 */
	String getDeptDuty(@Param("deptName")String deptName, @Param("personId")String personId, @Param("company")String company);
	/**
	 * 获取车间职务，判断是否存在车间主管
	 * @author wangrong
	 * @param workshopID
	 * @param string 
	 * @param string 
	 * @return
	 */
	String getWorkshopDuty(Map map);
	/**
	 * 创建订单 获取物料表信息
	 * @param map
	 * @return
	 */
	List<Map> getOrderTabList(@Param("map")Map map);
	
	/**
	 * 创建订单 获取物料表信息 获取原材料仓
	 * @param map
	 * @return
	 */
	List<Map> getOrderTabListForSourceFactory(@Param("map")Map map);
	
    /**
     * 获取订单物料信息数据条数
     * @author natelu
     * @param map
     * @return
     */
	int getOrderMaterialCount(Map map);
	
	/**
	 * 获取订单物料信息
	 * @author natelu
	 * @param map
	 * @return
	 */
	List<CompanyMaterialTableBean> getOrderMaterial(Map map);
	
	String getMaxCompanyMaterialCode(@Param("rqString")String rqString);
	//比较公共物料表中是否存在相同的，不同的再插入到公共物料表中
	List<MaterialBean> materialCompare(CompanyMaterialTableBean materialBean);
	/**
	 * Description: 比较companyMaterial是否已存在  
	 * @param materialBean
	 * @return  
	 * @author 王荣
	 * @date 2018年4月18日 上午11:33:05
	 */
	List<CompanyMaterialTableBean> companyMaterialCompare(CompanyMaterialTableBean materialBean);
	/**
	 * 获取工序详情
	 * @author 王荣
	 * @param map
	 * @return
	 */
	List<BaseProcessDetailPojo> getProcessDetail(Map<String,Object> map);
	/**
	* @Description: 用于领料单 获取物料名称通过公司物料表中正在使用的并且库存数量不为零的 
	* @date 2018年4月4日 上午8:33:05 
	* @author 李斌
	* @return List 
	* @throws
	 */ 
	List<String> getCompanyMaterialNameByCount(Map map);
	/**
	 * 用于领料单 获取物料规格通过公司物料表中正在使用的物料并且库存数量不为零通过物料名称筛选
	* @date 2018年4月4日 上午8:55:19 
	* @author 李斌
	* @return List<String> 
	* @throws
	 */
	List<String> getModelByCountAndMaterialName(Map map);
	/**
	 * 用于领料单 获取物料的默认仓库通过公司物料表中正在使用的物料并且库存数量不为零通过物料名称筛选
	* @date 2018年4月4日 上午9:29:55 
	* @author 李斌
	* @return List<String> 
	* @throws 
	 */
	List<String> getDefaultWarehouseByCountAndMaterialName(Map map);
	/**
	 * 用于领料单 获取物料的供应商名称通过公司物料表中正在使用的物料并且库存数量不为零通过物料名称筛选
	* @date 2018年4月4日 上午9:44:55 
	* @author 李斌
	* @return List<String> 
	* @throws
	 */ 
	List<String> getProviderNameByCountAndMaterialName(Map map);
	/**
	 * 用于领料单 获取物料的物料类型通过公司物料表中正在使用的物料并且库存数量不为零通过物料名称筛选
	* @date 2018年4月4日 上午9:59:02 
	* @author 李斌
	* @return List<String> 
	* @throws 
	 */
	List<String> getMateialTypeByCountAndMaterialName(Map map);
	/**
	 * 用于领料单 获取物料的色号通过公司物料表中正在使用的物料并且库存数量不为零通过物料名称筛选
	* @date 2018年4月4日 上午10:14:08 
	* @author 李斌
	* @return List<String> 
	* @throws 
	 */
	List<String> getColorByCountAndMaterialName(Map map);
	/**
	 *  获取剩余可领取的库存数
	* @date 2018年4月4日 上午10:57:41 
	* @author 李斌
	* @return List<CompanyMaterialTableBean> 
	* @throws
	 */
	List<CompanyMaterialTableBean> getSurplusAmount(Map map);
	/**
	 * 通过一些物料的具体信息去查询物料表
	* @date 2018年4月5日 上午7:52:19 
	* @author 李斌
	* @return void 
	* @throws
	 */
	List<CompanyMaterialTableBean> getCompanyMaterialByDetail(Map map);
	/**
	 * 插入公司物料信息包括库存数
	* @date 2018年4月5日 上午11:29:20 
	* @author 李斌
	* @return void 
	* @throws
	 */
	int insertCompanyMaterialDetail(CompanyMaterialTableBean companyMaterial);
	/**
	 * 插入公司物料保存是否可库存
	* @date 2018年4月21日 上午9:12:22 
	* @author 李斌
	* @return void 
	* @throws
	 */
	void insertCompanyMaterialDetailAndIsStock(CompanyMaterialTableBean companyMaterial);

	/**  
	 * Description: TODO(这里用一句话描述这个方法的作用)  
	 * @param map
	 * @return  
	 * @author 王荣
	 */ 
	List<WorkshopProductionCycleBean> getDeptId2(Map map);

	
	/**@author nateLu
	 * 获取生产部门信息
	 * @param map
	 * @return
	 */
	List<DepartmentBean> getProductionDepartment(Map map);
	/**  
	 * Title: getRowMaterialType
	 * Description: 获取公共的物料类型  
	 * @param map
	 * @return  
	 * @author 王荣
	 * @date 2018年4月16日 上午11:35:05
	 */ 
//	List<String> getRowMaterialTypeIincludeAccessories(Map map);
	
	/**
	 * 更新订单明细表,通过物料代码
	* @date 2018年4月19日 下午3:25:21 
	* @author 李斌
	* @return void 
	* @throws
	 */  
	int updateOrderInfoDetailByCompanyMaterialCode(OrderInfoDetailBean orderInfoDetail);
	/**  
	 * Title: getAdminDept
	 * Description: 获取admin公司的部门信息  
	 * @param map
	 * @return  
	 * @author 王荣
	 * @date 2018年4月24日 下午3:09:34
	 */ 
	List<DepartmentBean> getAdminDept(Map map);
	/**  
	 * Title: importDept
	 * Description: 导入部门 
	 * @param map  
	 * @author 王荣
	 */ 
	void importDept(Map map);
	/**  
	 * Title: compareDept
	 * Description: 对比部门是否存在
	 * @param departmentBean
	 * @return  
	 * @author 王荣
	 */ 
	List<DepartmentBean> compareDept(@Param("departmentBean")DepartmentBean departmentBean);
	/**  
	 * Title: getAdminWorkshop
	 * Description: 获取admin公司的车间信息  
	 * @param map
	 * @return List
	 * @author 王荣
	 */ 
	List<WorkshopProductionCycleBean> getAdminWorkshop(Map map);
	/**  
	 * Title: importWorkshop
	 * Description: 导入车间  
	 * @param map  
	 * @author 王荣
	 */ 
	void importWorkshop(Map map);
	/**  
	 * Title: getAdminProcess
	 * Description: 获取admin的工序  
	 * @param map
	 * @return  
	 * @author 王荣
	 */ 
	List<ProcessBean> getAdminProcess(Map map);
	/**  
	 * Title: importprocess
	 * Description: 导入工序  
	 * @param map  
	 * @author 王荣
	 */ 
	void importprocess(Map map);
	
	/**
	 * 更新公司物料库存占用数
	* @date 2018年4月27日 下午1:58:03 
	* @author 李斌
	* @return void 
	* @throws
	 */
	void updateCompanyMaterialByUseCount(CompanyMaterialTableBean companyMaterialTableBean);
	/**  
	 * Description: TODO(这里用一句话描述这个方法的作用)  
	 * @param map
	 * @return  
	 * @author 王荣
	 */ 
	List<WorkshopProductionCycleBean> getWorkshopName2(Map map);
	
	/**
	 * 获取有效的供应商名称
	* @date 2018年5月9日 下午3:56:23 
	* @author 李斌
	* @return List<String> 
	* @throws
	 */
	List<String> getValidProviderName(Map map);
	/**  
	 * Description: 比较客户代码与名称是否重复  
	 * @param map
	 * @return  
	 * @author 王荣
	 */ 
	List<CustomerBean> compareCustomer(Map map);
	/**  
	 * Description: 比较客户代码与名称是否重复   子公司
	 * @param map
	 * @return  
	 * @author 王荣
	 */ 
	List<CustomerBean> compareCustomerSub(Map map);
	/**  
	 * Description: TODO(这里用一句话描述这个方法的作用)  
	 * @param map
	 * @return  
	 * @author 王荣
	 */ 
	List<String> getPhoneNumber(Map map);
	/**  
	 * Description: 获取职务  
	 * @param map
	 * @return  
	 * @author 王荣
	 */ 
	List<String> getDuty(Map map);
	/**  
	 * Description: TODO(这里用一句话描述这个方法的作用)  
	 * @param map
	 * @return  
	 * @author 王荣
	 */ 
	CompanyMaterialTableBean getMaterialInfo(Map map);
	
	/**
	 * 获取车间分页数据
	 * @author natelu
	 * @param deptId(部门id  非必传)
	 * @param workShopId(车间id 非必传)
	 * @param selectWhere(模糊查车间名称)
	 * @return
	 * @throws ServiceException
	 */
	List<WorkshopProductionCycleBean> getWorkShopPageData(Map map);
	int getWorkShopPageCount(Map map);
	
	/**
	 * 获取公司所有人员
	 * @author nate
	 * @param request
	 * @return
	 * @throws ServiceException
	 */
	int getUserCount(Map map);
	List<UserBean> getUserData(Map map);
	
	/**
	 * 获取车间报报工审核人员
	 * @param workShopId
	 * @return
	 * @throws ServiceException  
	 * @author nate
	 */
	List<String> getWorkShopApprovalReportUser(Map map);
	
	/**
	 * 设置车间审核人员
	 * @param workShopId
	 * @param userId
	 * @return
	 * @throws ServiceException  
	 * @author nate
	 */
	void addWorkShopApprovalReportUser(Map map);
	/**
	 * 通过车间id删除记录
	 * @param map
	 */
	void deleteByWorkShop(Map map);
	
	/**
	 * natelu
	 * 通过用户id获取用户能审核报工车间
	 * @param string
	 * @return
	 */
	List<String> getUserApprovalReportWorkShopByUserId(@Param("userId")String userId);
	
	String getApprovalUserNameByWorkShowAndCompany(@Param("workShopId")String workShopId,@Param("company")String company);
	
	/**
	 * 通过供应商名称获取客户信息
	* @date 2018年5月28日 上午10:30:19 
	* @author 李斌
	* @return List<CustomerBean>  
	* @throws
	 */
	List<CustomerBean> getCustomerListByCustomerName(Map map);
	
	/**
	 * 获取部门下没合并的车间
	 * @param deptId
	 * @return
	 * @throws ServiceException  
	 * @author nate
	 */
	List<WorkshopProductionCycleBean> getDeptNoMegerWorkShop(Map map);
	/**
	 * 通过车间id获取车间名称
	* @date 2018年6月9日 上午9:39:39 
	* @author 李斌
	* @return void 
	* @throws 
	 */ 
	WorkshopProductionCycleBean getWorkshopById(String workShopName);
	//获取符合的物料
	List<CompanyMaterialTableBean> getUniqueCompanyMaterialByDetail(Map<String, Object> unique);
	//批量修改物料
	void updateCompanyMaterialList(Map map);
	//校验单位是否合格
	int getCompanyMaterialUnitByUnit(CompanyMaterialTableBean companyMaterialTableBean);
	
	/**
	 * 获取出入库中的所有客户名称(原料辅料)
	* @date 2018年7月25日 上午10:56:22 
	* @author 李斌
	* @return List<String> 
	* @throws
	 */
	List<String> getCustomerNameByWarehouse(Map<String, Object> map);
	
	/**
	 * 获取公司物料表中所有公司名称
	* @date 2018年7月26日 下午4:02:32  
	* @author 李斌
	* @return List<String> 
	* @throws
	 */
	List<CompanyMaterialTableBean> getCompanyNameByMaterial();
	
	/**
	 * 获取出入库制单人(原料辅料仓)
	* @date 2018年8月15日 下午2:56:36 
	* @author 李斌
	* @return List<UserBean> 
	* @throws
	 */
	List<UserBean> getWarehouseInOutCreate(Map<String, Object> map);
	
	/**
	 * 获取出入库制单人(成品/报废/待处理)
	* @date 2018年8月15日 下午3:08:48 
	* @author 李斌
	* @return List<UserBean> 
	* @throws
	 */
	List<UserBean> getOtherWarehouseCreate(Map<String, Object> map);
	/**
	 * 添加交接出入库工序
	 * @param map
	 * @author 王荣
	 */
	void insertHandoverProcess(Map<String,Object> map);
	/**
	 * 检查车间是否重复
	 * @param map
	 * @return
	 * @author 王荣
	 */
	List<WorkshopProductionCycleBean> checkWorkshopIsRepeat(Map<String, Object> map);
	/**
	 * 添加车间
	 * @param map
	 * @author 王荣
	 */
	void insertCycle(Map<String, Object> map);
	//车间生产周期数据修改
	void updateCycle(Map<String,Object> map);
	/**
	 * 添加工序可审核人
	 * @param map
	 * @author 王荣
	 */
	void insertBaseProcessApprover(Map<String,Object> map);
	/**
	 * 删除工序可审核人
	 * @param map
	 * @author 王荣
	 */
	void deleteBaseProcessApprover(Map<String,Object> map);
	/**
	 * 获取用户通过部门list和用户list
	 * @param map
	 * @return
	 * @author 王荣
	 */
	List<Map<String, Object>> getUserByDeptIdListAndUserIdList(Map<String, Object> map);
	int getUserByDeptIdListAndUserIdListCount(Map<String, Object> map);
	/**
	 * 插入导入车间时的部门，一步改为两步
	 * @nate
	 * @param map
	 */
//	void importWorkshopDept(Map map);
	/**
	 * 导入车间时判断部门是否存在
	 * @param deptId
	 * @return
	 */
	DepartmentBean checkDeptHave(@Param("deptId")String deptId,@Param("loginCompany")String loginCompany);
	/**
	 * 插入车间时插入部门
	 * @param map
	 */
	void importWorkshopDept(Map map);
	
	//获取客户信息(分页)
	int getCustomerListCount(Map<String, Object> map);
	List<CustomerBean> getCustomerListPage(Map<String, Object> map);
	/**
	 * 通过搜索条件获取公司职员简单信息
	 * @param requestMap
	 * @author 王荣
	 */
	List<UserDeptWorkPojo> getUserSimpleInfo(Map<String, Object> requestMap);
	
	/**
	 * 添加或修改用户职业技能 
	 * @param requestMap
	 * @author 王荣
	 */
	void updateUserSkill(Map<String, Object> requestMap);
	
	/**
	 * 审核物料
	 * @param materialBean
	 * @return
	 */
	int approvalCompanyMaterial(CompanyMaterialTableBean materialBean);
	
	/**
	 * 禁用物料
	 * @param materialBean
	 * @return
	 */
	int disableCompanyMaterial(CompanyMaterialTableBean materialBean);
	/**
	 * 查询物料是否使用
	 * @param map
	 * @return
	 */
	int queryMaterialCompanyIsUsed(Map map);
	/**
	 * 只修改linkcompany
	 * @param map
	 */
	int updateCustomerForLinkCompany(Map map);
	
	List<Map> getCompanyMaterialDeptInfoList(Map map);
	
	/*批量修改物料是否为现货属性*/
	void updateCompanyMaterialIsSpot(CompanyMaterialTableBean materialBean);
	/*批量修改物料配置信息*/
	void updateCompanyMaterialConfig(CompanyMaterialTableBean materialBean);
	/**
	 * 修改工序报工方式
	 */
	void updateProcessReportMode();
}
